package com.ruoyi.drone.service.impl;

import java.util.List;
import java.util.UUID;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.drone.mapper.DroneTaskMapper;
import com.ruoyi.drone.domain.DroneTask;
import com.ruoyi.drone.service.IDroneTaskService;

/**
 * 任务发布Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
@Service
public class DroneTaskServiceImpl implements IDroneTaskService 
{
    @Autowired
    private DroneTaskMapper droneTaskMapper;

    /**
     * 查询任务发布
     * 
     * @param taskId 任务发布主键
     * @return 任务发布
     */
    @Override
    public DroneTask selectDroneTaskByTaskId(Long taskId)
    {
        return droneTaskMapper.selectDroneTaskByTaskId(taskId);
    }

    /**
     * 根据任务编号查询任务发布
     * 
     * @param taskNo 任务编号
     * @return 任务发布
     */
    @Override
    public DroneTask selectDroneTaskByTaskNo(String taskNo)
    {
        return droneTaskMapper.selectDroneTaskByTaskNo(taskNo);
    }

    /**
     * 查询任务发布列表
     * 
     * @param droneTask 任务发布
     * @return 任务发布
     */
    @Override
    public List<DroneTask> selectDroneTaskList(DroneTask droneTask)
    {
        return droneTaskMapper.selectDroneTaskList(droneTask);
    }

    /**
     * 根据组织ID查询任务发布列表
     * 
     * @param orgId 组织ID
     * @return 任务发布集合
     */
    @Override
    public List<DroneTask> selectDroneTaskListByOrgId(Long orgId)
    {
        return droneTaskMapper.selectDroneTaskListByOrgId(orgId);
    }

    /**
     * 新增任务发布
     * 
     * @param droneTask 任务发布
     * @return 结果
     */
    @Override
    public int insertDroneTask(DroneTask droneTask)
    {
        // 生成任务编号
        if (StringUtils.isEmpty(droneTask.getTaskNo())) {
            droneTask.setTaskNo(generateTaskNo());
        }
        
        // 状态由Controller设置，这里不再设置默认状态
        
        // 设置默认最大飞手数量
        if (droneTask.getMaxPilots() == null) {
            droneTask.setMaxPilots(1);
        }
        
        droneTask.setCreateTime(DateUtils.getNowDate());
        return droneTaskMapper.insertDroneTask(droneTask);
    }

    /**
     * 修改任务发布
     * 
     * @param droneTask 任务发布
     * @return 结果
     */
    @Override
    public int updateDroneTask(DroneTask droneTask)
    {
        droneTask.setUpdateTime(DateUtils.getNowDate());
        return droneTaskMapper.updateDroneTask(droneTask);
    }

    /**
     * 批量删除任务发布
     * 
     * @param taskIds 需要删除的任务发布主键
     * @return 结果
     */
    @Override
    public int deleteDroneTaskByTaskIds(Long[] taskIds)
    {
        return droneTaskMapper.deleteDroneTaskByTaskIds(taskIds);
    }

    /**
     * 删除任务发布信息
     * 
     * @param taskId 任务发布主键
     * @return 结果
     */
    @Override
    public int deleteDroneTaskByTaskId(Long taskId)
    {
        return droneTaskMapper.deleteDroneTaskByTaskId(taskId);
    }

    /**
     * 检查任务编号是否唯一
     * 
     * @param taskNo 任务编号
     * @return 结果
     */
    @Override
    public boolean checkTaskNoUnique(String taskNo)
    {
        return droneTaskMapper.checkTaskNoUnique(taskNo) == 0;
    }

    /**
     * 更新任务状态
     * 
     * @param droneTask 任务发布
     * @return 结果
     */
    @Override
    public int updateDroneTaskStatus(DroneTask droneTask)
    {
        droneTask.setUpdateTime(DateUtils.getNowDate());
        return droneTaskMapper.updateDroneTaskStatus(droneTask);
    }

    /**
     * 发布任务
     * 
     * @param taskId 任务ID
     * @return 结果
     */
    @Override
    public int publishTask(Long taskId)
    {
        DroneTask droneTask = new DroneTask();
        droneTask.setTaskId(taskId);
        droneTask.setStatus("1"); // 已发布
        droneTask.setPublishTime(DateUtils.getNowDate());
        droneTask.setUpdateTime(DateUtils.getNowDate());
        return droneTaskMapper.updateDroneTaskStatus(droneTask);
    }

    /**
     * 取消任务
     * 
     * @param taskId 任务ID
     * @return 结果
     */
    @Override
    public int cancelTask(Long taskId)
    {
        DroneTask droneTask = new DroneTask();
        droneTask.setTaskId(taskId);
        droneTask.setStatus("4"); // 已取消
        droneTask.setUpdateTime(DateUtils.getNowDate());
        return droneTaskMapper.updateDroneTaskStatus(droneTask);
    }

    /**
     * 完成任务
     * 
     * @param taskId 任务ID
     * @return 结果
     */
    @Override
    public int completeTask(Long taskId)
    {
        DroneTask droneTask = new DroneTask();
        droneTask.setTaskId(taskId);
        droneTask.setStatus("3"); // 已完成
        droneTask.setCompleteTime(DateUtils.getNowDate());
        droneTask.setUpdateTime(DateUtils.getNowDate());
        return droneTaskMapper.updateDroneTaskStatus(droneTask);
    }

    /**
     * 生成任务编号
     * 
     * @return 任务编号
     */
    private String generateTaskNo()
    {
        String timestamp = String.valueOf(System.currentTimeMillis());
        String uuid = UUID.randomUUID().toString().replace("-", "").substring(0, 8);
        return "TASK" + timestamp.substring(timestamp.length() - 8) + uuid;
    }
}
